home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 116_01.zip / ITVERB.C < prev    next >
Text File  |  1993-06-19  |  4KB  |  314 lines

  1.  
  2. /*  ITVERB.C  no mod for V 1.43  */
  3. #include "advent.h"
  4.  
  5. /*
  6.     Routines to process intransitive verbs
  7. */
  8. itverb()
  9. {
  10.     switch(verb) {
  11.     case DROP:
  12.     case SAY:
  13.     case WAVE:
  14.     case CALM:
  15.     case RUB:
  16.     case THROW:
  17.     case FIND:
  18.     case FEED:
  19.     case BREAK:
  20.     case WAKE:
  21.         needobj();
  22.         break;
  23.     case TAKE:
  24.         ivtake();
  25.         break;
  26.     case OPEN:
  27.     case LOCK:
  28.         ivopen();
  29.         break;
  30.     case NOTHING:
  31.         rspeak(54);
  32.         break;
  33.     case ON:
  34.     case OFF:
  35.     case POUR:
  36.         trverb();
  37.         break;
  38.     case WALK:
  39.         actspk(verb);
  40.         break;
  41.     case KILL:
  42.         ivkill();
  43.         break;
  44.     /*
  45.     case EAT:
  46.         iveat();
  47.         break;
  48.     */
  49.     case DRINK:
  50.         ivdrink();
  51.         break;
  52.     case QUIT:
  53.         ivquit();
  54.         break;
  55.     /*
  56.     case FILL:
  57.         ivfill();
  58.         break;
  59.     */
  60.     case BLAST:
  61.         vblast();
  62.         break;
  63.     case SCORE:
  64.         score();
  65.         break;
  66.     case FOO:
  67.         ivfoo();
  68.         break;
  69.     case SUSPEND:
  70.         saveflg = 1;
  71.         break;
  72.     case INVENTORY:
  73.         inventory();
  74.         break;
  75.     default:
  76.         printf("This intransitive not implemented yet\n");
  77.     }
  78. }
  79.  
  80. /*
  81.     CARRY, TAKE etc.
  82. */
  83. ivtake()
  84. {
  85.     int anobj,item;
  86.  
  87.     anobj = 0;
  88.     for(item=1;item<MAXOBJ;++item) {
  89.         if(place[item]==loc) {
  90.             if(anobj != 0) {
  91.                 needobj();
  92.                 return;
  93.             }
  94.             anobj = item;
  95.         }
  96.     }
  97.     if(anobj==0|| (dcheck() && dflag>=2)) {
  98.         needobj();
  99.         return;
  100.     }
  101.     object = anobj;
  102.     vtake();
  103. }
  104.  
  105. /*
  106.     OPEN, LOCK, UNLOCK
  107. */
  108. ivopen()
  109. {
  110.     if(here(CLAM))
  111.         object=CLAM;
  112.     if(here(OYSTER))
  113.         object=OYSTER;
  114.     if(at(DOOR))
  115.         object=DOOR;
  116.     if(at(GRATE))
  117.         object=GRATE;
  118.     if(here(CHAIN)) {
  119.         if(object != 0) {
  120.             needobj();
  121.             return;
  122.         }
  123.         object=CHAIN;
  124.     }
  125.     if(object==0) {
  126.         rspeak(28);
  127.         return;
  128.     }
  129.     vopen();
  130. }
  131.  
  132. /*
  133.     ATTACK, KILL etc
  134. */
  135. ivkill()
  136. {
  137.     object1 = 0;
  138.     if(dcheck() && dflag >=2)
  139.         object=DWARF;
  140.     if(here(SNAKE))
  141.         addobj(SNAKE);
  142.     if(at(DRAGON) && prop[DRAGON]==0)
  143.         addobj(DRAGON);
  144.     if(at(TROLL))
  145.         addobj(TROLL);
  146.     if(here(BEAR) && prop[BEAR]==0)
  147.         addobj(BEAR);
  148.     if(object1 != 0) {
  149.         needobj();
  150.         return;
  151.     }
  152.     if(object != 0) {
  153.         vkill();
  154.         return;
  155.     }
  156.     if(here(BIRD) && verb!= THROW)
  157.         object=BIRD;
  158.     if(here(CLAM) || here(OYSTER))
  159.         addobj(CLAM);
  160.     if(object1 != 0) {
  161.         needobj();
  162.         return;
  163.     }
  164.     vkill();
  165. }
  166.  
  167. /*
  168.     EAT
  169. */
  170. /*  no more room...
  171. iveat()
  172. {
  173.     if(!here(FOOD))
  174.         needobj();
  175.     else {
  176.         object=FOOD;
  177.         veat();
  178.     }
  179. }
  180. */
  181.  
  182. /*
  183.     DRINK
  184. */
  185. ivdrink()
  186. {
  187.     if(liqloc(loc) != WATER &&
  188.       (liq()!= WATER || !here(BOTTLE)))
  189.         needobj();
  190.     else {
  191.         object=WATER;
  192.         vdrink();
  193.     }
  194. }
  195.  
  196. /*
  197.     QUIT
  198. */
  199. ivquit()
  200. {
  201.     if(gaveup=yes(22,54,54))
  202.         normend();
  203. }
  204.  
  205. /*
  206.     FILL
  207. */
  208. /*  no room...
  209. ivfill()
  210. {
  211.     if(!here(BOTTLE))
  212.         needobj();
  213.     else {
  214.         object=BOTTLE;
  215.         vfill();
  216.     }
  217. }
  218. */
  219.  
  220. /*
  221.     Handle fee fie foe foo...
  222. */
  223. ivfoo()
  224. {
  225.     char k,msg;
  226.     k = vocab(word1,3000);
  227.     msg = 42;
  228.     if (foobar != 1-k) {
  229.         if (foobar != 0)
  230.             msg = 151;
  231.         rspeak(msg);
  232.         return;
  233.     }
  234.     foobar = k;
  235.     if (k != 4)
  236.         return;
  237.     foobar = 0;
  238.     if (place[EGGS] == 92 ||
  239.        (toting(EGGS) && loc == 92)) {
  240.         rspeak(msg);
  241.         return;
  242.     }
  243.     if (place[EGGS] == 0 && place[TROLL] == 0 &&
  244.         prop[TROLL] == 0)
  245.         prop[TROLL] = 1;
  246.     if (here(EGGS))
  247.         k = 1;
  248.     else if (loc == 92)
  249.         k = 0;
  250.     else
  251.         k = 2;
  252.     move(EGGS,92);
  253.     pspeak(EGGS,k);
  254.     return;
  255. }
  256.  
  257. /*
  258.     read etc...
  259. */
  260. /*  no room for this...
  261. ivread()
  262. {
  263.     if (here(MAGAZINE))
  264.         object = MAGAZINE;
  265.     if (here(TABLET))
  266.         object = object*100 + TABLET;
  267.     if (here(MESSAGE))
  268.         object = object*100 + MESSAGE;
  269.     if (object > 100 || object == 0 || dark()) {
  270.         needobj();
  271.         return;
  272.     }
  273.     vread();
  274. }
  275. */
  276.  
  277. /*
  278.     INVENTORY 
  279. */
  280. inventory()
  281. {
  282.     char msg;
  283.     int i;
  284.  
  285.     msg = 98;
  286.     for (i=1; i<=MAXOBJ; ++i) {
  287.         if (i==BEAR || !toting(i))
  288.             continue;
  289.         if (msg)
  290.             rspeak(99);
  291.         msg = 0;
  292.         pspeak(i,-1);
  293.     }
  294.     if (toting(BEAR))
  295.         msg = 141;
  296.     if (msg)
  297.         rspeak(msg);
  298. }
  299.  
  300. /*
  301.     ensure uniqueness as objects are searched
  302.     out for an intransitive verb
  303. */
  304. addobj(obj)
  305. {
  306.     if(object1 != 0)
  307.         return;
  308.     if(object != 0) {
  309.         object1 = -1;
  310.         return;
  311.     }
  312.     object = obj;
  313. }
  314.